package it.gestionedocumentale.struts.form;

import it.gestionedocumentale.model.Classificazione;
import it.gestionedocumentale.model.Tag;
import it.gestionedocumentale.spring.service.MyServiceFactory;
import it.gestionedocumentale.utility.UtilityDate;

import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;

public class RicercaDocumentoForm extends ActionForm {
	private static Log log = LogFactory.getLog(RicercaDocumentoForm.class);
	
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private String nomeDocumento;
	private String dataInizioString;
	private Date dataInizio;
	private String dataFineString;
	private Date dataFine;
	private Long idClassificazione;
	private Long idTag;
	
	public String getNomeDocumento() {
		return nomeDocumento;
	}
	public void setNomeDocumento(String nomeDocumento) {
		this.nomeDocumento = nomeDocumento.equals("")?null:nomeDocumento;
	}
	public String getDataInizioString() {
		return dataInizioString;
	}
	public void setDataInizioString(String dataInizioString) {
		this.dataInizioString = dataInizioString.equals("")?null:dataInizioString;
		dataInizio = UtilityDate.stringToDate(dataInizioString);
	}
	public Date getDataInizio() {
		return dataInizio;
	}
	public void setDataInizio(Date dataInizio) {
		this.dataInizio = dataInizio;
		dataInizioString = UtilityDate.dateToString(dataInizio);
	}
	public String getDataFineString() {
		return dataFineString;
	}
	public void setDataFineString(String dataFineString) {
		this.dataFineString = dataFineString.equals("")?null:dataFineString;
		dataFine = UtilityDate.stringToDate(dataFineString);
	}
	public Date getDataFine() {
		return dataFine;
	}
	public void setDataFine(Date dataFine) {
		this.dataFine = dataFine;
		dataFineString = UtilityDate.dateToString(dataFine);
	}
	public Long getIdClassificazione() {
		return idClassificazione;
	}
	public void setIdClassificazione(Long idClassificazione) {
		this.idClassificazione = idClassificazione==0?null:idClassificazione;
	}
	public Long getIdTag() {
		return idTag;
	}
	public void setIdTag(Long idTag) {
		this.idTag = idTag==0?null:idTag;
	}
	
	@Override
	public ActionErrors validate(ActionMapping mapping,
			HttpServletRequest request) {
		ActionErrors errors = new ActionErrors();
		if((dataFine!=null && dataInizio==null) || (dataFine!=null && dataInizio!=null && (dataFine.before(dataInizio) || dataFine.equals(dataInizio)))) {
			errors.add("dataFine", new ActionMessage("errors.RicercaDocumentoForm.dataFine.campo_non_valido"));
		}
		if(errors.size()>0){
			try {
				List<Classificazione> listaClassificazioni = MyServiceFactory.getClassificazioneService().findAll();
				request.setAttribute("listaClassificazioni", listaClassificazioni);
				List<Tag> listaTag= MyServiceFactory.getTagService().findAll();
				request.setAttribute("listaTag", listaTag);
			} catch (Exception e) {
				e.printStackTrace();
				log.error(e);
				mapping.findForward("error");
			}
		}
		return errors;
	}
	
}
